<?php 
namespace app\front\service\v2;

use app\front\service\BasePayService;
use think\Session;
class Pay extends BasePayService
{
    public function AliPay($type='RSA'){
       
        $params=[
            'service'=>'create_direct_pay_by_user',//接口名称。
            'partner'=>config('PID'),//签约的支付宝账号对应的支付宝唯一用户号。
            '_input_charset'=>'UTF-8',//商户网站使用的编码格式，如UTF-8、GBK、GB2312等。
            'sign_type'=>$type,//DSA、RSA、MD5三个值可选，必须大写。
            'sign'=>'',//请参见本文档&ldquo;附录：签名与验签&rdquo;。
            'notify_url'=>config('notify_url'),//支付宝服务器主动通知商户网站里指定的页面http路径。 (异步请求地址，可为空）
            'return_url'=>config('return_url'),//支付宝处理完请求后，当前页面自动跳转到商户网站里指定页面的http路径。 (同步请求地址，可为空）
            'out_trade_no'=>makeOrderNo(),//支付宝合作商户网站唯一订单号。
            'subject'=>'支付宝测试',//商品的标题/交易标题/订单标题/订单关键字等。 该参数最长为128个汉字。
            'payment_type'=>1,//只支持取值为1（商品购买）。
            'total_fee'=>0.02,//该笔订单的资金总额，单位为RMB-Yuan。取值范围为[0.01，100000000.00]，精确到小数点后两位。
            'seller_id'=>config('PID'),//seller_id是以2088开头的纯16位数字。
            'body'=>'孙洪亮测试',//对一笔交易的具体描述信息。如果是多种商品，请将商品描述字符串累加传给body。
        ];  
         $params=setSign($params,$source=2,$type);
        $url=config('PAYGAGEWAY').'?'.arrToUrl($params,false);
        header("location:{$url}");exit;
    }
    
    public function newAliPay($type='RSA2'){
        //公共参数
        $pub_params = [
            'app_id'    => config('AliAppid'),
            'method'    =>  'alipay.trade.page.pay', //接口名称 应填写固定值alipay.trade.page.pay
            'format'    =>  'JSON', //目前仅支持JSON
            'return_url'    => config('return_url'), //同步返回地址
            'charset'    =>  'UTF-8',
            'sign_type'    =>  $type,//签名方式
            'sign'    =>  '', //签名
            'timestamp'    => date('Y-m-d H:i:s'), //发送时间 格式0000-00-00 00:00:00
            'version'    =>  '1.0', //固定为1.0
            'notify_url'    => config('notify_url'), //异步通知地址
            'biz_content'    =>  '', //业务请求参数的集合
        ];
        
        //业务参数
        $api_params = [
            'out_trade_no'  => makeOrderNo(),//商户订单号
            'product_code'  => 'FAST_INSTANT_TRADE_PAY', //销售产品码 固定值
            'total_amount'  => 0.01, //总价 单位为元
            'subject'  => '新版支付宝支付测试', //订单标题
        ];
        $pub_params['biz_content'] = json_encode($api_params,JSON_UNESCAPED_UNICODE);
        // echo '<pre>';
        
        $pub_params =  setSign( $pub_params,$source=2,$type);
        //print_r($pub_params);
        $url = config('NEW_PAYGAGEWAY') . '?' .arrToUrl($pub_params,false);
        header("location:{$url}");exit;
    }

   
    public  function gzhPay(){
        logs("input.txt", input('param.id')."||".input('param.moneyNum'));
        //判断两个值是否存在于session中
        //如果都session内店名和金额不存在则将前台表单接收到的值存储到session
        if(session('id')==null && session('moneyNum')==null){
            //如果表单有数据则赋值
            if(input('param.id') && input('param.moneyNum'))
            {
                session('id',input('param.id'));
                session('moneyNum',input('param.moneyNum'));
            }else{ //如果表单内无数据
                echo date("Y-m-d H:i:s",time())." system error place try again！";
                logs("judgeError.txt", date("Y-m-d H:i:s",time())." 错误信息:session为空且接受不到表单数据！".session('PHPSESSID') );
            }
        }else{
            //如果session内存在店名和金额
            //如果session内存在店名和金额且表单存在数据
            if(input('param.id') && input('param.moneyNum'))
            {
                //判断表单数据与session是否相等如不等 则赋值给session
                if((session('id')!=input('param.id'))||(session('moneyNum')!=input('param.moneyNum')))
                    session('id',input('param.id'));
                    session('moneyNum',input('param.moneyNum'));
            }
        }
        if(session('openid') && session('id') && session('moneyNum')){
            //支付成功后将用户信息存储到数据库userinfo表中
            //判断用户opid是否已存在
            if($this->existUserinfo(session('openid')))
            {
                $this->updateUserInfo(session('openid'));
            }else{
                //,$souce=2表示是顾客
                $this->saveUserInfo(session('openid'),$souce=2);
            }
            //获取用户从输入金额页面输入的支付金额
            $moneyNum= session('moneyNum');
            //获取门店Id
            $store_id=session('id');
            $storeMsg=$this->getStoreForStoreid($store_id);
            if(!$store_id){
                return "noStore";
            }
            //获取订单号
            $out_trade_no=makeOrderNo();
            //将信息存储到临时信息表中
            //处理输入金额，去掉分后面的小数点
            $inputmoney= $moneyNum;
            $moneyNum= floor(bcmul($moneyNum,100));
            $openid=session('openid');
            $record_data=$this->award_prob($store_id, session('openid'), $inputmoney,  $out_trade_no);
            // logs("#.txt",$record_data);
            $this->Temporary_add($out_trade_no,$openid, $store_id, $storeMsg['store_name'],$moneyNum,$record_data['award_money'],$record_data['shop_id'],$record_data['filiale_id'],$record_data['record_statu'],$record_data['purpose']);
            //获取预支付ID
            $prepay_id=$this->getPrepayId($out_trade_no,$moneyNum);
            //获取公众号支付所需参数并存储到json中
            $params = $this->getArrGzhParams($prepay_id);
            $params['out_trade_no']=$out_trade_no;
            return $params;
        }else{
            $this->getOpenId();
            $REQUEST_URI=substr($_SERVER['REQUEST_URI'],1);
            $redurl = $_SERVER['REQUEST_SCHEME'] . '://' . config('HTTP_HOST') . $REQUEST_URI;
            header("location:{$redurl}");exit;
        }
    }
    public function laotanPay($moneyNum){
        $openid=$this->getOpenId();
        $out_trade_no=makeOrderNo();
      
        $moneyNum= floor(bcmul($moneyNum,100));
        //获取预支付ID
        $prepay_id=$this->getPrepayId($out_trade_no,$moneyNum);
        //获取公众号支付所需参数并存储到json中
        $json = $this->getJsGzhParams($prepay_id);
        //向支付页面传入
//         $this->assign('mch_billno', $out_trade_no);
     //    $this->assign('json', $json);
//         //带着参数跳转到gzhPay.html
//         $this->display('laotanPay');
        return $json;
    }
}
?>


